package SocketBaseTest;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*
需求:通过udp传输方式,将一段文字数据发送出去. 
定义了一个Udp发送端 
思路: 
1建立updsocket服务. 
2,提供数据,并将数据封装到数据包中. 
3.通过socket服务的发送功能,将数据包发出去. 
4.关闭资源 
*/  
class UdpSend{  
    public static void main(String[] args) throws Exception{  
        //1创建UdP服务,通过DatagramSocket对象.  
        DatagramSocket ds=new DatagramSocket(8888);
        //2,确定数据,并封装成数据包.  
        byte[] buf="udp ge men lai le ".getBytes();  
        DatagramPacket dp=new DatagramPacket(buf,buf.length, InetAddress.getByName("127.0.0.1"),10000);
        //3,通过socket服务,将已有的数据包发送出去,通过send方法.      
      
        ds.send(dp);  
        //4.关闭资源.  
        ds.close();  
    }  
}  
/* 
需求: 
定义一个应用程序,用于接收udp 协议传输的数据并处理的. 
 
思路: 
1,定义udpsocket服务.通常都会监听一个端口,其实就是给这个接收网络应用程序定义一个数字标识. 
  方便明确哪些数据过来,该应用程序可以处理. 
2.定义一个数据包,因为要存储接收到的字节数据, 
因为数据包对象中有更多功能可以提取字节数据中不同数据信息 
3.通过Socket服务的receive方法将收到的数据存入已定义好的数据包中. 
4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上. 
5,关闭资源. 
*/  
class UdpRece{  
    public static void main(String[] args) throws Exception{  
    //1,创建udp socket建立端点.  
    DatagramSocket ds=new DatagramSocket(10000);
    while(true){   //持续接受
        byte[] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,buf.length);
        //3.通过服务的receive方法将收到的数据存入数据包中.
        ds.receive(dp);
        //4通过数据包的方法获取其中的数据.
        String ip=dp.getAddress().getHostAddress();
        String data=new String(dp.getData(),0,dp.getLength());
        int pot =dp.getPort();
        System.out.println(ip+"::"+data+"::"+pot);
    }
        //5关闭资源
//        ds.close();
    }  
}  
